package raf;

import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Arrays;
import java.util.Scanner;

/**
 * 修改用户昵称
 * 程序启动后要求用户输入用户名和新昵称。然后修改user.dat文件中该用户的昵称
 * 
 * 如果输入的用户名在user.dat文件中不存在，则输出查无此人。
 * 
 * 思路:
 * 循环读取每条记录的用户名，如果用户名不匹配则直接跳转指针到下一条记录开始位置
 * 如果用户名匹配(注意，读取出的用户名要trim后再和用户输入的对比)，则跳转指针
 * 到该条记录的昵称位置，将新的昵称转换为字节后扩容到32字节后写入以达到覆盖原
 * 昵称的效果(注:一定要扩容，否则可能出现昵称覆盖不完全的情况)。
 * 
 * @author 范传奇
 *
 */
public class UpdateDemo {
	public static void main(String[] args) throws IOException {
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入用户名:");
		String username = scanner.nextLine();
		System.out.println("请输入新昵称:");
		String nickname = scanner.nextLine();
		
		RandomAccessFile raf = new RandomAccessFile("user.dat","rw");
		boolean update = false;//是否有记录修改了
		for(int i=0;i<raf.length()/100;i++) {
			raf.seek(i*100);
			byte[] data = new byte[32];
			raf.read(data);
			String name = new String(data,"UTF-8").trim();
			if(name.equals(username)) {
				raf.seek(i*100+64);
				data = nickname.getBytes("UTF-8");
				data = Arrays.copyOf(data, 32);
				raf.write(data);
				update = true;
				break;
			}
		}		
		if(update) {
			System.out.println("修改完毕!");
		}else {
			System.out.println("查无此人!");
		}
		raf.close();
	}
}





















